package com.shiguiwu.springmybatis.spring.transaction.propagation;

import com.shiguiwu.springmybatis.spring.transaction.TransactionTests;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * @description: required传播行为
 * @author: stone
 * @date: Created by 2021/6/15 11:09
 * @version: 1.0.0
 * @pakeage: com.shiguiwu.springmybatis.spring.transaction.propagation
 */
public class RequiredTests {

    public static void main(String[] args) throws Exception {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(TransactionTests.class);
//        TxService1 txService1 = context.getBean(TxService1.class);
//        TxService2 txService2 = context.getBean(TxService2.class);
        /**
         * 1.通过这两个方法我们证明了在外围方法未开启事务的情况下 Propagation.REQUIRED 修饰的内部方法
         * 会新开启自己的事务，且开启的事务相互独立，互不干扰。
         */
        //TxService3 txService3 = context.getBean(TxService3.class);
        //txService3.notransaction_exception_required_required();

        /**
         * 2.结果我们证明在外围方法开启事务的情况下 Propagation.REQUIRED 修饰的内部方法会加入
         * 到外围方法的事务中，所有 Propagation.REQUIRED 修饰的内部方法和外围方法均属于同一事务，只
         * 要一个方法回滚，整个事务均回滚。
         */
        TxService3 txService3 = context.getBean(TxService3.class);
        txService3.transaction_exception_try_required_required();






    }
}
